home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / Main.bin / AWTEvent.java < prev    next >
Text File  |  1998-09-22  |  11KB  |  333 lines

  1. /*
  2.  * @(#)AWTEvent.java    1.22 98/07/01
  3.  *
  4.  * Copyright 1995-1998 by Sun Microsystems, Inc.,
  5.  * 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
  6.  * All rights reserved.
  7.  * 
  8.  * This software is the confidential and proprietary information
  9.  * of Sun Microsystems, Inc. ("Confidential Information").  You
  10.  * shall not disclose such Confidential Information and shall use
  11.  * it only in accordance with the terms of the license agreement
  12.  * you entered into with Sun.
  13.  */
  14.  
  15. package java.awt;
  16.  
  17. import java.util.EventObject;
  18. import java.awt.event.*;
  19.  
  20. /**
  21.  * The root event class for all AWT events.
  22.  * This class and its subclasses supercede the original
  23.  * java.awt.Event class.
  24.  * Subclasses of this root AWTEvent class defined outside of the
  25.  * java.awt.event package should define event ID values greater than
  26.  * the value defined by RESERVED_ID_MAX.
  27.  *
  28.  * The event masks defined in this class are needed ONLY by
  29.  * component subclasses which are using Component.enableEvents()
  30.  * to select for event types not selected by registered listeners.
  31.  * If a listener is registered on a component, the appropriate event
  32.  * mask is already set internally by the component.
  33.  * @see Component#enableEvents
  34.  *
  35.  * @see java.awt.event.ComponentEvent
  36.  * @see java.awt.event.FocusEvent
  37.  * @see java.awt.event.KeyEvent
  38.  * @see java.awt.event.MouseEvent
  39.  * @see java.awt.event.WindowEvent
  40.  * @see java.awt.event.ActionEvent
  41.  * @see java.awt.event.AdjustmentEvent
  42.  * @see java.awt.event.ItemEvent
  43.  * @see java.awt.event.TextEvent
  44.  *
  45.  * @version 1.22 07/01/98
  46.  * @author Carl Quinn
  47.  * @author Amy Fowler
  48.  */
  49. public abstract class AWTEvent extends EventObject {
  50.     private transient int data;
  51.  
  52.     protected int id;
  53.  
  54.     // This field controls whether or not the event is sent back
  55.     // down to the peer once the source has processed it -
  56.     // false means it's sent to the peer, true means it's not.
  57.     // Semantic events always have a 'true' value since they were
  58.     // generated by the peer in response to a low-level event.
  59.     protected boolean consumed = false;
  60.  
  61.     /**
  62.      * The event mask for selecting component events.
  63.      */
  64.     public final static long COMPONENT_EVENT_MASK = 0x01;
  65.  
  66.     /**
  67.      * The event mask for selecting container events.
  68.      */
  69.     public final static long CONTAINER_EVENT_MASK = 0x02;
  70.  
  71.     /**
  72.      * The event mask for selecting focus events.
  73.      */
  74.     public final static long FOCUS_EVENT_MASK = 0x04;
  75.  
  76.     /**
  77.      * The event mask for selecting key events.
  78.      */
  79.     public final static long KEY_EVENT_MASK = 0x08;
  80.  
  81.     /**
  82.      * The event mask for selecting mouse events.
  83.      */
  84.     public final static long MOUSE_EVENT_MASK = 0x10;
  85.  
  86.     /**
  87.      * The event mask for selecting mouse motion events.
  88.      */
  89.     public final static long MOUSE_MOTION_EVENT_MASK = 0x20;
  90.  
  91.     /**
  92.      * The event mask for selecting window events.
  93.      */
  94.     public final static long WINDOW_EVENT_MASK = 0x40;
  95.  
  96.     /**
  97.      * The event mask for selecting action events.
  98.      */
  99.     public final static long ACTION_EVENT_MASK = 0x80;
  100.  
  101.     /**
  102.      * The event mask for selecting adjustment events.
  103.      */
  104.     public final static long ADJUSTMENT_EVENT_MASK = 0x100;
  105.  
  106.     /**
  107.      * The event mask for selecting item events.
  108.      */
  109.     public final static long ITEM_EVENT_MASK = 0x200;
  110.  
  111.     /**
  112.      * The event mask for selecting text events.
  113.      */
  114.     public final static long TEXT_EVENT_MASK = 0x400;
  115.  
  116.     /**
  117.      * The maximum value for reserved AWT event IDs. Programs defining
  118.      * their own event IDs should use IDs greater than this value.
  119.      */
  120.     public final static int RESERVED_ID_MAX = 1999;
  121.  
  122.     /*
  123.      * JDK 1.1 serialVersionUID 
  124.      */
  125.     private static final long serialVersionUID = -1825314779160409405L;
  126.  
  127.     /**
  128.      * Constructs an AWTEvent object from the parameters of a 1.0-style event.
  129.      * @param event the old-style event
  130.      */
  131.     public AWTEvent(Event event) {
  132.         this(event.target, event.id);
  133.     }
  134.  
  135.     /**
  136.      * Constructs an AWTEvent object with the specified source object and type.
  137.      * @param source the object where the event originated
  138.      * @id the event type
  139.      */
  140.     public AWTEvent(Object source, int id) {
  141.         super(source);
  142.     this.id = id;
  143.         switch(id) {
  144.           case ActionEvent.ACTION_PERFORMED:
  145.           case ItemEvent.ITEM_STATE_CHANGED:
  146.           case AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED:
  147.           case TextEvent.TEXT_VALUE_CHANGED:
  148.             consumed = true;
  149.             break;
  150.           default:
  151.         }
  152.     }
  153.  
  154.     /**
  155.      * Returns the event type.
  156.      */
  157.     public int getID() {
  158.         return id;
  159.     }
  160.  
  161.     public String toString() {
  162.         String srcName = null;
  163.         if (source instanceof Component) {
  164.             srcName = ((Component)source).getName();
  165.         } else if (source instanceof MenuComponent) {
  166.             srcName = ((MenuComponent)source).getName();
  167.         }
  168.     return getClass().getName() + "[" + paramString() + "] on " +
  169.             (srcName != null? srcName : source);
  170.     }
  171.  
  172.     public String paramString() {
  173.         return "";
  174.     }
  175.  
  176.     protected void consume() {
  177.         switch(id) {
  178.           case KeyEvent.KEY_PRESSED:
  179.           case KeyEvent.KEY_RELEASED:
  180.           case MouseEvent.MOUSE_PRESSED:
  181.           case MouseEvent.MOUSE_RELEASED:
  182.           case MouseEvent.MOUSE_MOVED:
  183.           case MouseEvent.MOUSE_DRAGGED:
  184.           case MouseEvent.MOUSE_ENTERED:
  185.           case MouseEvent.MOUSE_EXITED:
  186.               consumed = true;
  187.               break;
  188.           default:
  189.               // event type cannot be consumed
  190.         }
  191.     }
  192.  
  193.     protected boolean isConsumed() {
  194.         return consumed;
  195.     }
  196.  
  197.     /* Converts a new event to an old one (used for compatibility).
  198.      * If the new event cannot be converted (because no old equivelent
  199.      * exists) then this returns null.
  200.      *
  201.      * Note: this method is here instead of in each individual new
  202.      * event class in java.awt.event because we don't want to make
  203.      * it public and it needs to be called from java.awt.
  204.      */
  205.     Event convertToOld() {
  206.         Object src = getSource();
  207.         int newid = id;
  208.  
  209.         switch(id) {
  210.           case KeyEvent.KEY_PRESSED:
  211.           case KeyEvent.KEY_RELEASED:
  212.               KeyEvent ke = (KeyEvent)this;
  213.               if (ke.isActionKey()) {
  214.                   newid = (id == KeyEvent.KEY_PRESSED? 
  215.                            Event.KEY_ACTION : Event.KEY_ACTION_RELEASE);
  216.               }
  217.               int keyCode = ke.getKeyCode();
  218.               if (keyCode == KeyEvent.VK_SHIFT || 
  219.                   keyCode == KeyEvent.VK_CONTROL || 
  220.                   keyCode == KeyEvent.VK_ALT) {
  221.                   return null;  // suppress modifier keys in old event model.
  222.               }
  223.               // no mask for button1 existed in old Event - strip it out
  224.               return new Event(src, ke.getWhen(), newid, 0, 0,
  225.                                Event.getOldEventKey(ke), 
  226.                                (ke.getModifiers() & ~InputEvent.BUTTON1_MASK));
  227.  
  228.           case MouseEvent.MOUSE_PRESSED:
  229.           case MouseEvent.MOUSE_RELEASED:
  230.           case MouseEvent.MOUSE_MOVED:
  231.           case MouseEvent.MOUSE_DRAGGED:
  232.           case MouseEvent.MOUSE_ENTERED:
  233.           case MouseEvent.MOUSE_EXITED:
  234.               MouseEvent me = (MouseEvent)this;
  235.               // no mask for button1 existed in old Event - strip it out
  236.               Event olde = new Event(src, me.getWhen(), newid, 
  237.                                me.getX(), me.getY(), 0, 
  238.                                (me.getModifiers() & ~InputEvent.BUTTON1_MASK));
  239.               olde.clickCount = me.getClickCount();
  240.               return olde;
  241.  
  242.           case FocusEvent.FOCUS_GAINED:
  243.               return new Event(src, Event.GOT_FOCUS, null);
  244.  
  245.           case FocusEvent.FOCUS_LOST:
  246.               return new Event(src, Event.LOST_FOCUS, null);
  247.  
  248.           case WindowEvent.WINDOW_CLOSING:
  249.           case WindowEvent.WINDOW_ICONIFIED:
  250.           case WindowEvent.WINDOW_DEICONIFIED:
  251.               return new Event(src, newid, null);
  252.  
  253.           case ComponentEvent.COMPONENT_MOVED:
  254.               if (src instanceof Frame || src instanceof Dialog) {
  255.                   Point p = ((Component)src).getLocation();
  256.                   return new Event(src, 0, Event.WINDOW_MOVED, p.x, p.y, 0, 0);
  257.               }
  258.               break;
  259.  
  260.           case ActionEvent.ACTION_PERFORMED:
  261.               ActionEvent ae = (ActionEvent)this;
  262.               String cmd;
  263.               if (src instanceof Button) { 
  264.                   cmd = ((Button)src).getLabel();
  265.               } else if (src instanceof MenuItem) {
  266.                   cmd = ((MenuItem)src).getLabel();
  267.               } else {
  268.                   cmd = ae.getActionCommand();
  269.               } 
  270.               return new Event(src, 0, newid, 0, 0, 0, ae.getModifiers(), cmd);
  271.  
  272.           case ItemEvent.ITEM_STATE_CHANGED:
  273.               ItemEvent ie = (ItemEvent)this;
  274.               Object arg;
  275.               if (src instanceof List) {
  276.                   newid = (ie.getStateChange() == ItemEvent.SELECTED?
  277.                            Event.LIST_SELECT : Event.LIST_DESELECT);
  278.                   arg = ie.getItem();
  279.               } else {
  280.                   newid = Event.ACTION_EVENT;
  281.                   
  282.                 //Netscape: CheckboxMenuItems use the name of the 
  283.                 //menu choice as the arg, NOT a Bool
  284.  
  285.                   if (src instanceof Choice || src instanceof CheckboxMenuItem) {
  286.                       arg = ie.getItem();
  287.  
  288.                   } else { // Checkbox
  289.                       arg = new Boolean(ie.getStateChange() == ItemEvent.SELECTED);
  290.                   }
  291.               }             
  292.               return new Event(src, newid, arg);
  293.  
  294.           case AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED:
  295.               AdjustmentEvent aje = (AdjustmentEvent)this;
  296.               switch(aje.getAdjustmentType()) {
  297.                 case AdjustmentEvent.UNIT_INCREMENT:
  298.                   newid = Event.SCROLL_LINE_DOWN;
  299.                   break;
  300.                 case AdjustmentEvent.UNIT_DECREMENT:
  301.                   newid = Event.SCROLL_LINE_UP;
  302.                   break;
  303.                 case AdjustmentEvent.BLOCK_INCREMENT:
  304.                   newid = Event.SCROLL_PAGE_DOWN;
  305.                   break;
  306.                 case AdjustmentEvent.BLOCK_DECREMENT:
  307.                   newid = Event.SCROLL_PAGE_UP;
  308.                   break;
  309.                 case AdjustmentEvent.TRACK:
  310.                   newid = Event.SCROLL_ABSOLUTE;
  311.                   break;
  312.                 default:
  313.                   return null;
  314.               }
  315.               return new Event(src, newid, new Integer(aje.getValue()));
  316.  
  317.           default:
  318.         }
  319.         return null;
  320.     }                          
  321.  
  322.     /* Package-private method to change a KeyEvent's source to the new
  323.      * focus owner.  This method needs to be here instead of in KeyEvent
  324.      * because it should only be called from by the EventQueue.
  325.      */
  326.     void setSource(Object newSource) {
  327.         if (!(this instanceof KeyEvent)) {
  328.             throw new ClassCastException();
  329.         }
  330.         source = newSource;
  331.     }
  332. }
  333.